﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Poli.IA.GA;

namespace Poli.IA.Web
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Pesquisar();
            }
            else
            {
                filtrosUtilizados.Visible = true;
            }
        }

        protected void btnProcurarPlaylist_Click(object sender, EventArgs e)
        {
            Pesquisar();
        }

        private void Pesquisar()
        {
            int threshold = 120;
            literalFiltros.Text = string.Empty;
            Perfil selecionado = CriarPerfil();
            string caminho = Server.MapPath(@"banco.xml");
            CicloGA otimizacao = new CicloGA(selecionado, caminho, threshold);
            List<Musica> resultado = otimizacao.iteracoesGA();
            var retorno = from n in resultado
                          select new
                          {
                              Artista = n.Artista,
                              Nome = n.Nome,
                              Estilo = n.Estilo,
                              Busca = (n.Nome + " " + n.Artista).Replace(' ', '+')
                          };
            rptSugestoes.DataSource = retorno.ToList();
            rptSugestoes.DataBind();
            LimparCampos();
        }

        private Perfil CriarPerfil()
        {
            Perfil selecionado = new Perfil();
            if (!string.IsNullOrEmpty(comment.Text) && !comment.Text.Equals("Algum artista em mente?"))
            {
                selecionado.Artista = comment.Text;
                literalFiltros.Text += "Artista: " + selecionado.Artista + "<br />";
            }
            if (!ddlEstilo.SelectedValue.Equals("-1"))
            {
                selecionado.Estilo = (EstiloEnum)Enum.Parse(typeof(EstiloEnum), ddlEstilo.SelectedValue, false);
                literalFiltros.Text += "Estilo: " + selecionado.Estilo + "<br />";
            }
            if (!ddlNacionalidade.SelectedValue.Equals("-1"))
            {
                selecionado.Nacionalidade = (NacionalidadeEnum)Enum.Parse(typeof(NacionalidadeEnum), ddlNacionalidade.SelectedValue, false);
                literalFiltros.Text += "Nacionalidade: " + selecionado.Nacionalidade + "<br />";
            }
            if (!ddlDecada.SelectedValue.Equals("-1"))
            {
                selecionado.Decada = (DecadaEnum)Enum.Parse(typeof(DecadaEnum), ddlDecada.SelectedValue, false);
                literalFiltros.Text += "Decada: " + selecionado.Decada + "<br />";
            }
            if (!ddlHit.SelectedValue.Equals("-1"))
            {
                selecionado.Hit = (HitEnum)Enum.Parse(typeof(HitEnum), ddlHit.SelectedValue, false);
                literalFiltros.Text += "Hit: " + selecionado.Hit + "<br />";
            }
            if (!ddlRitmo.SelectedValue.Equals("-1"))
            {
                selecionado.Ritmo = (RitmoEnum)Enum.Parse(typeof(RitmoEnum), ddlRitmo.SelectedValue, false);
                literalFiltros.Text += "Ritmo: " + selecionado.Ritmo + "<br />";
            }
            if (!ddlTendencia.SelectedValue.Equals("-1"))
            {
                selecionado.Tendencia = (TendenciaEnum)Enum.Parse(typeof(TendenciaEnum), ddlTendencia.SelectedValue, false);
                literalFiltros.Text += "Tendencia: " + selecionado.Tendencia + "<br />";
            }

            return selecionado;
        }

        private void LimparCampos()
        {
            comment.Text = "Algum artista em mente?";
            ddlDecada.SelectedValue = "-1";
            ddlEstilo.SelectedValue = "-1";
            ddlHit.SelectedValue = "-1";
            ddlRitmo.SelectedValue = "-1";
            ddlNacionalidade.SelectedValue = "-1";
            ddlTendencia.SelectedValue = "-1";
        }
    }
}